package com._3are.organizacional;

import java.util.Collection;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import com._3are.basicas.Pessoa;
import com._3are.seguranca.Usuario;

@Entity
@Table(name = "TB_Funcionario")
@PrimaryKeyJoinColumn(name = "codigo")
public class Funcionario extends Pessoa {

	@ManyToOne @JoinColumn(name="cargo_id", nullable=false)
	private Cargo cargo;
	@Column(length = 10, nullable = false, unique=true)
	private String matricula;
	@Temporal(TemporalType.DATE)
	@Column(nullable = false, name="data_admissao")
	private Date dataAdmissao; 
	@Temporal(TemporalType.DATE)
	@Column(nullable = false, name="data_demissao")
	private Date dataDemissao;
	@ManyToOne @JoinColumn(name="depart_id", nullable=false)
	private Departamento departamento;
	@OneToOne @JoinColumn(name="ususario_id", nullable=false)
	private Usuario usuario;
	@ManyToOne @JoinColumn(name="escolaridade_id", nullable=false)
	private Escolaridade escolaridade;
	@OneToMany
	@JoinTable(name = "TB_Func_Depend", joinColumns = @JoinColumn(name = "func_id"), inverseJoinColumns = @JoinColumn(name = "Depend_id"))
	private Collection<Dependente> dependentes;
	@Temporal(TemporalType.DATE) @Column(name="inicio_feriais")
	private Date inicioFerias;
	@Temporal(TemporalType.DATE) @Column(name="final_feriais")
	private Date fimFerias;

	public Cargo getCargo() {
		return cargo;
	}

	public void setCargo(Cargo cargo) {
		this.cargo = cargo;
	}

	public String getMatricula() {
		return matricula;
	}

	public void setMatricula(String matricula) {
		this.matricula = matricula;
	}

	public Date getDataAdmissao() {
		return dataAdmissao;
	}

	public void setDataAdmissao(Date dataAdmissao) {
		this.dataAdmissao = dataAdmissao;
	}

	public Date getDataDemissao() {
		return dataDemissao;
	}

	public void setDataDemissao(Date dataDemissao) {
		this.dataDemissao = dataDemissao;
	}

	public Departamento getDepartamento() {
		return departamento;
	}

	public void setDepartamento(Departamento departamento) {
		this.departamento = departamento;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public Escolaridade getEscolaridade() {
		return escolaridade;
	}

	public void setEscolaridade(Escolaridade escolaridade) {
		this.escolaridade = escolaridade;
	}

	public Collection<Dependente> getDependentes() {
		return dependentes;
	}

	public void setDependentes(Collection<Dependente> dependentes) {
		this.dependentes = dependentes;
	}

	public Date getInicioFerias() {
		return inicioFerias;
	}

	public void setInicioFerias(Date inicioFerias) {
		this.inicioFerias = inicioFerias;
	}

	public Date getFimFerias() {
		return fimFerias;
	}

	public void setFimFerias(Date fimFerias) {
		this.fimFerias = fimFerias;
	}

}
